#include<stdio.h>
#include<assert.h>
#include<unistd.h>
int g_val = 100; //全局
int main()
{
  pid_t id=fork();
  //fork在返回的时候父子进程都有了，return两次，
  //pid_t 类型的id是一个变量，返回的本质就是写入，此时那个进程先执行就会发生写时拷贝
  assert(id>=0);
  if(id==0)
  {
    while(1)
    {
      printf("child pid:%d,ppid:%d,g_val:%d,&g_val:%p\n",\
          getpid(),getppid(),g_val,&g_val);
      sleep(1);
      g_val++;//子进程修改g_val
    }
  }
  else
  {
    while(1)
    {
      printf("father pid:%d,ppid:%d,g_val:%d,&g_val:%p\n",\
          getpid(),getppid(),g_val,&g_val);
      sleep(1);
    }
  }
  return 0;
}
